/*
 * Copyright(C) 2010 Luvina Software Company
 *
 * GenericDao.java, Oct 29, 2010 ntmhuong
 */
package net.luvina.manageuser.dao;

import java.io.Serializable;

import org.hibernate.LockMode;

/**
 * 各Daoの親クラス用の汎用Daoのインターフェース
 *
 * @version $Rev$
 * @param <T>
 *            テーブル用DTOのクラス
 * @param <PK>
 *            PrimaryKeyのクラス
 */
public interface GenericDao<T, PK extends Serializable> {

    /**
     * create
     *
     * @param newInstance
     *            T
     * @return PK
     */
    PK create(T newInstance);

    /**
     * read
     *
     * @param id
     *            PK
     * @return T
     */
    T read(PK id);

    /**
     * read
     *
     * @param id
     *            PK
     * @param lockMode
     *            LockMode
     * @return T
     */
    T read(PK id, LockMode lockMode);

    /**
     * update
     *
     * @param transientObject
     */
    void update(T transientObject);

    /**
     * delete
     *
     * @param persistentObject
     */
    void delete(T persistentObject);
}
